package widecast;

import java.util.ArrayList;
import java.util.List;

public class GenericWideCastDemo {

    public <T> void test(List<T> list, T obj) {

        List list1 =new ArrayList();
        List<Integer> list2 = new ArrayList();
        List<String> list3 =new ArrayList();
        List<?> list4 = new ArrayList();
        List<T> list5 = new ArrayList();

        list2 = list1;//不使用泛型的集合可以赋值给泛型集合。
        list2.add(100);
        //list2 = list3;//泛型集合类型不一致不能赋值。
        list4 = list2;//可以理解为赋值给一个上界集合。
        //list4.add(100); //错误，?表示一个集合，具体类型无法确定，不能添加。
        list4.add(null); //但是可以添加null;
        list4.remove(0); //可以执行删除操作。

        list5 = list;
        list5.add(obj);//因为T现在是确定的一种类型，可以添加

        for(T object: list5){
            System.out.println(object);
        }
    }

    public static void main(String[] args) {
        List<String> list = new ArrayList();
        GenericWideCastDemo demo = new GenericWideCastDemo();
        demo.test(list,"hello,world!");
    }
}
